package com.fanilycar51.mvp.util;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;

import com.fanilycar51.mvp.common.AppAplication;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Formatter;
import java.util.Locale;


/**
 * Created by Administrator on 2016/3/8.
 * 这个工具类辅助获取一些相关的XMl文件以及XML资源
 */
public class UiUtils {
    private static Toast toast;

    /**
     * 通过布局文件ID获取视图
     *
     * @param layoutId
     * @return
     */
    public static View getView(int layoutId) {
        Log.i("test", AppAplication.context + "");
        View view = View.inflate(getContext(), layoutId, null);
        return view;
    }

    /**
     * 获取整个应用程序的上下文对象
     *
     * @return
     */
    public static Context getContext() {
        return AppAplication.context;
    }

    /**
     * 获取color.xml文件中的color资源
     *
     * @param colorId
     * @return
     */
    public static int getColor(int colorId) {
        return getContext().getResources().getColor(colorId);
    }

    /**
     * 获取自定义属性的数组
     *
     * @param strArrId
     * @return
     */
    public static String[] getStringArr(int strArrId) {
        return getContext().getResources().getStringArray(strArrId);
    }

    /**
     * 定义吐司的方法,防止吐司重复弹出的解决办法
     *
     * @param toastText
     * @param flag
     */
    public static void Toast(String toastText, boolean flag) {

        if (toast == null) {
            if (flag) {
                toast = Toast.makeText(getContext(), toastText, Toast.LENGTH_LONG);
            } else {
                toast = Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT);
            }
        } else {
            if (flag) {
                toast.setText(toastText);
                toast.setDuration(Toast.LENGTH_LONG);
            } else {
                toast.setText(toastText);
                toast.setDuration(Toast.LENGTH_LONG);
            }
        }
        toast.show();
    }

    /**
     * 重载方法,用于吐司在屏幕中间显示的方法
     *
     * @param toastText
     * @param flag
     */
    public static void ToastCenter(String toastText, boolean flag) {
        if (toast == null) {
            if (flag) {
                toast = Toast.makeText(getContext(), toastText, Toast.LENGTH_LONG);
            } else {
                toast = Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT);
            }
        } else {
            if (flag) {
                toast.setText(toastText);
                toast.setDuration(Toast.LENGTH_LONG);
            } else {
                toast.setText(toastText);
                toast.setDuration(Toast.LENGTH_LONG);
            }
        }
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    }

    /**
     * 手动关闭吐司的方法
     */
    public static void cancelToast() {
        if (toast != null) {
            toast.cancel();
        }
    }

    /**
     * 定义将dp转化为px的方法
     *
     * @param dp
     * @return
     */
    public static int dp2px(int dp) {
        float density = getContext().getResources().getDisplayMetrics().density;
        return (int) (dp * density + 0.5f);
    }


    /**
     * 定义将px转化为dp的方法
     *
     * @param px
     * @return
     */
    public static int px2dp(int px) {
        float density = getContext().getResources().getDisplayMetrics().density;
        return (int) (px / density + 0.5f);
    }


    /**
     * 获取到应用程序的Handler对象
     *
     * @return
     */
    public static Handler getHandler() {
        return AppAplication.handler;
    }


    /**
     * 将Runnable线程放入到主线程运行的方法
     *
     * @param runnable
     */
    public static void runOnUiThread(Runnable runnable) {
        if (isInMainThread()) {
            runnable.run();
        } else {
            getHandler().post(runnable);
        }
    }

    /**
     * 判断当线运行的线程是否是主线程ID
     *
     * @return
     */
    public static boolean isInMainThread() {
        int myTid = android.os.Process.myTid();
        return myTid == AppAplication.mainThreadId;
    }

    /**
     * 改变屏幕透明度的方法
     *
     * @param activity
     * @param bgAlpha
     */
    public static void backgroundAlpha(Activity activity, float bgAlpha) {
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.alpha = bgAlpha;
        activity.getWindow().setAttributes(lp);
    }

    /**
     * Activity进行跳转的方法,注意设置了标记,如果是跳转系统相机，不能用这个标记,否则拿不到返回码
     */
    public static void startActivity(Context context, Class<? extends Activity> clazz) {
        Intent intent = new Intent(context, clazz);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        context.startActivity(intent);
    }


    /**
     * 按指定yyyy-MM-dd HH:mm:ss格式化当前时间的方法
     *
     * @return
     */
    public static String currentTime() {
        long time = System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1 = new Date(time);
        String t1 = format.format(d1);
        return t1;
    }

    /**
     * 掉此方法输入所要转换的时间输入例如（"2014年06月14日16时09分00秒"）返回时间戳
     *
     * @param time
     * @return
     */
    public static String data(String time) {
        SimpleDateFormat sdr = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss",
                Locale.CHINA);
        Date date;
        String times = null;
        try {
            date = sdr.parse(time);
            long l = date.getTime();
            String stf = String.valueOf(l);
            times = stf.substring(0, 10);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return times;
    }


    /**
     * 调用此方法输入所要转换的时间戳输入例如（1402733340）输出（"2014年06月14日16时09分00秒"）
     *
     * @param time
     * @return
     */
    public static String times(String time) {
        SimpleDateFormat sdr = new SimpleDateFormat("yyyy-MM-dd");
        @SuppressWarnings("unused")
        long lcc = Long.valueOf(time);
        int i = Integer.parseInt(time);
        String times = sdr.format(new Date(i * 1000L));
        return times;

    }

    /**
     * 获取屏幕宽度的方法
     *
     * @param activity
     * @return
     */
    public static int getScreenWidth(Activity activity) {
        DisplayMetrics metric = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(metric);
        return metric.widthPixels;
    }


    /**
     * 获取屏幕高度的方法
     *
     * @param activity
     * @return
     */
    public static int getScreenHeight(Activity activity) {
        DisplayMetrics metric = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(metric);
        return metric.heightPixels;
    }


    /**
     * Sp转Px的方法
     *
     * @param sp
     */
    public static int sp2px(float sp) {
        final float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity;
        return (int) (sp * fontScale + 0.5f);
    }


    /**
     * 将指定的毫秒数转化为HH::mm:ss的格式
     *
     * @return
     */
    public static String timeFormat(long timeMs) {
        StringBuilder mFormatBuilder = new StringBuilder();
        Formatter mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());
        long totalSeconds = timeMs / 1000;
        long seconds = totalSeconds % 60;
        long minutes = (totalSeconds / 60) % 60;
        long hours = totalSeconds / 3600;

        mFormatBuilder.setLength(0);
        if (hours > 0) {
            return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds)
                    .toString();
        } else {
            return mFormatter.format("%02d:%02d", minutes, seconds).toString();
        }
    }

    /**
     * 跳转到目标activity
     *
     * @param cls
     * @param bundle
     */
    public void goToActivity(Class cls, Bundle bundle) {
        Intent intent = new Intent(getContext(), cls);
        //携带数据的跳转,如果没有数据需要携带,直接传null即可
        if (bundle != null) {
            intent.putExtra("bundle", bundle);
        }
        getContext().startActivity(intent);
    }

    /**
     * 隐藏系统键盘的方法
     */
    public static void hideKeyboard(Activity activity) {
        View view = activity.getCurrentFocus();
        if (view != null) {
            ((InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE)).
                    hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}
